﻿using app.Common;
using HLVControl.Grid;
using HLVControl.Grid.Data;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.EntityClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace eService.BLL
{
    public class ExcuteUSER
    {
        eServiceEntities dbEntities;
        IExecuteData<USER> Execute;
        public string ErrMsg { get; set; }
        public bool KQ { get; set; }

        public ExcuteUSER()
        {
            dbEntities = ConnectionProvider.getDbEntities();
            Execute = new ExecuteData<USER>(dbEntities);
        }

        public List<USER> GetAll()
        {
            return (List<USER>)Execute.GetAll();
        }

        public USER GetByID(string UserName)
        {
            USER u = Execute.GetById(UserName);
            if (u == null)
                return null;
            return u;
        }
        public USER LoadValues(string FullName, string LoginName, string pass, int GroupPerID)
        {
            KQ = false;
            USER obj = new USER();
            if (FullName != "" || LoginName != "" || pass != "")
            {
                obj.Pass = pass;
                obj.UserName = LoginName;
                obj.FullName = FullName;
                obj.GID = GroupPerID;
                obj.Status = 1;
                obj.Create = DateTime.Now;
                KQ = true;
            }
            else
            {
                obj = null;
                ErrMsg = "Vui lòng điền đầy dủ thông tin!";
            }
            return obj;
        }
        public bool Add(USER NewUSER)
        {
            KQ = false;
            if (NewUSER != null)
            {
                KQ = Execute.Insert(NewUSER);
                if (KQ)
                    ErrMsg = "Thêm người dùng mới thành công!";
                else
                    ErrMsg = "Không thể thêm người dùng mới!";
            }
            else
            {
                ErrMsg = "Vui lòng nhập thông tin đầy đủ!";
            }
            return KQ;
        }
        public bool UpDate(USER USER)
        {
            KQ = false;
            if (USER != null)
            {
                USER obj = dbEntities.USERs.Find(USER.UserName);
                if (obj != null)
                {
                    KQ = Execute.Update(USER, obj);
                    if (KQ)
                        ErrMsg = "Cập nhật người dùng thành công!";
                    else
                        ErrMsg = "Không thể cập nhật người dùng !";
                }
            }
            else
            {
                ErrMsg = "Vui lòng chọn người dùng !";
            }
            return KQ;
        }
        public bool Delete(USER USER)
        {
            KQ = false;
            if (USER != null)
            {
                USER obj = dbEntities.USERs.Find(USER.UserName);
                if (obj != null)
                {
                    KQ = Execute.Delete(obj);
                    if (KQ)
                        ErrMsg = "xoá người dùng thành công!";
                    else
                        ErrMsg = "Không thể xoá người dùng !";
                }
            }
            else
            {
                ErrMsg = "Vui lòng chọn người dùng !";
            }
            return KQ;
        }
        public bool LoadToTreeview(TreeListView treeview, List<USER> list)
        {
            KQ = false;
            treeview.Rows.Clear();
            int count = 1;
            foreach (USER obj in list)
            {
                TreeListRow row = treeview.CreateRow();
                row.Cells.Add(new TreeListCell(count));
                row.Cells.Add(new TreeListCell(obj.FullName));
                row.Cells.Add(new TreeListCell(obj.UserName));
                row.Cells.Add(new TreeListCell(obj.Pass));

                treeview.Rows.Add(row);
                count++;
                KQ = true;
            }
            treeview.Refresh();
            if (!KQ)
                ErrMsg = "Không thể tải dữ liệu!";
            return KQ;
        }

        public bool ChancePass(string Username,string MatKhauMoi)
        {
            KQ = false;
            if (MatKhauMoi!="")
            {
                USER obj = dbEntities.USERs.Find(Username);
                if (obj != null)
                {
                    obj.Pass = TCEncryption.ToEncrypt(MatKhauMoi);
                    dbEntities.SaveChanges();
                    KQ = true;
                    if (KQ)
                        ErrMsg = "Đổi mật khẩu người dùng thành công!";
                    else
                        ErrMsg = "Không thể đổi mật khẩu người dùng !";
                }
            }
            else
            {
                ErrMsg = "Nhập mật khẩu và tên đang nhập!";
            }
            return KQ;
        }
        public void GetLogin(string UserName, string Pass)
        {
            USER u = GetByID(UserName.Trim());
            if (u == null)
            {
                ErrMsg = "Tên đăng nhập hoặc mật khẩu sai!";
                KQ = false;
                return;
            }
            if (u.Pass == TCEncryption.ToEncrypt(Pass.Trim()))
            {
                ErrMsg = "Chào mừng bạn đến với chương trình";
                KQ = true;
            }
            else
            {
                ErrMsg = "Tên đăng nhập hoặc mật khẩu sai!";
                KQ = false;
                return;
            }
        }
    }
}
